/**
 ** @author:   焦岳
 ** @date:	   2025.10.31
 ** @brief:    sg90驱动
 */

#ifndef __BSP_SG90_H__
#define __BSP_SG90_H__

#include "tim.h"

// 舵机引脚分配，只是标注引脚，不用打开
// TIM3_CH1 (PC6) - 左前腿
// TIM3_CH2 (PC7) - 右后腿  
// TIM3_CH3 (PC8) - 右前腿
// TIM3_CH4 (PC9) - 左后腿

// 宏开关，决定是否要使用某些功能
// RTOS开关
// #define USR_RTOS
// 平滑运动控制算法开关
#define SMOOTH_ALGORITHM

void SG90_SetAngle_CH1(float angle);   // 左前 PC6 TIM3_CH1
void SG90_SetAngle_CH2(float angle);   // 右后 PC7 TIM3_CH2
void SG90_SetAngle_CH3(float angle);   // 右前 PC8 TIM3_CH3
void SG90_SetAngle_CH4(float angle);   // 左后 PC9 TIM3_CH4


void Servo_Set_Target_Angle(uint8_t servo_id, float angle);

// 舵机PWM参数
#define NUM_SERVOS 4
#define MIN_PULSE 500    // 最小脉冲宽度
#define MAX_PULSE 2500   // 最大脉冲宽度
#define PULSE_RANGE (MAX_PULSE - MIN_PULSE)

#ifdef SMOOTH_ALGORITHM
typedef struct 
{
    uint8_t current_angle;  // 当前角度
    float target_angle;   // 目标角度
    int16_t step;          // 步进角度
} Servo;
#endif

#endif
